package com.example.zhunongzonghe.security.entity;

import com.alibaba.fastjson2.annotation.JSONField;
import com.example.zhunongzonghe.entity.ZnUsers;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.security.core.GrantedAuthority;
import org.springframework.security.core.authority.SimpleGrantedAuthority;
import org.springframework.security.core.userdetails.UserDetails;

import java.util.Collection;
import java.util.List;

/**
 * @author 35238
 * @date 2023/7/11 0011 20:59
 */
@Data
@NoArgsConstructor
public class LoginUser implements UserDetails {
    
    private ZnUsers znUsers;

    private String authority;

    public LoginUser(ZnUsers znUsers, String authority) {
        this.znUsers = znUsers;
        this.authority = authority;
    }
    @JSONField(serialize = false)//防止序列化存入redis
    private List<SimpleGrantedAuthority> authorities;

    @Override
    //用于返回权限信息。
    public Collection<? extends GrantedAuthority> getAuthorities() {
        if (authorities != null){//当authorities集合为空，就说明是第一次，就需要转换，当不为空就说明不是第一次，就不需要转换直接返回
            return authorities;
        }
        return authorities;
    }

    @Override
    //用于获取用户密码。由于使用的实体类是User，所以获取的是数据库的用户密码
    public String getPassword() {
        return znUsers.getPassword();
    }

    @Override
    //用于获取用户名。由于使用的实体类是User，所以获取的是数据库的用户名
    public String getUsername() {
        return znUsers.getUserName();
    }

    @Override
    //判断登录状态是否过期。把这个改成true，表示永不过期
    public boolean isAccountNonExpired() {
        return true;
    }

    @Override
    //判断账号是否被锁定。把这个改成true，表示未锁定，不然登录的时候，不让你登录
    public boolean isAccountNonLocked() {
        return true;
    }

    @Override
    //判断登录凭证是否过期。把这个改成true，表示永不过期
    public boolean isCredentialsNonExpired() {
        return true;
    }

    @Override
    //判断用户是否可用。把这个改成true，表示可用状态
    public boolean isEnabled() {
        return true;
    }
}